home *** CD-ROM | disk | FTP | other *** search
/ Dr. Windows 3 / dr win3.zip / dr win3 / NEW_TECH / NTUNZ2.ZIP / UNZIP.H < prev    next >
C/C++ Source or Header  |  1994-02-10  |  61KB  |  1,773 lines

  1. /*---------------------------------------------------------------------------
  2.  
  3.   unzip.h
  4.  
  5.   This header file is used by all of the UnZip source files.  Its contents
  6.   are divided into seven more-or-less separate sections:  predefined macros,
  7.   OS-dependent includes, (mostly) OS-independent defines, typedefs, function 
  8.   prototypes (or "forward declarations," in the case of non-ANSI compilers),
  9.   macros, and global-variable declarations.
  10.  
  11.   ---------------------------------------------------------------------------*/
  12.  
  13.  
  14.  
  15. #ifndef __unzip_h   /* prevent multiple inclusions */
  16. #define __unzip_h
  17.  
  18. /*****************************************/
  19. /*  Predefined, Machine-specific Macros  */
  20. /*****************************************/
  21.  
  22. #if defined(__GO32__) && defined(unix)   /* MS-DOS extender:  NOT Unix */
  23. #  undef unix
  24. #endif
  25.  
  26. #if defined(unix) || defined(M_XENIX) || defined(COHERENT) || defined(__hpux)
  27. #  ifndef UNIX
  28. #    define UNIX
  29. #  endif
  30. #endif /* unix || M_XENIX || COHERENT || __hpux */
  31. #if defined(__convexc__) || defined(MINIX)
  32. #  ifndef UNIX
  33. #    define UNIX
  34. #  endif
  35. #endif /* __convexc__ || MINIX */
  36.  
  37. #ifdef __COMPILER_KCC__
  38. #  include <c-env.h>
  39. #  ifdef SYS_T20
  40. #    define TOPS20
  41. #  endif
  42. #endif /* __COMPILER_KCC__ */
  43.  
  44. /* define MSDOS for Turbo C (unless OS/2) and Power C as well as Microsoft C */
  45. #ifdef __POWERC
  46. #  define __TURBOC__
  47. #  define MSDOS
  48. #endif /* __POWERC */
  49. #if defined(__MSDOS__) && (!defined(MSDOS))   /* just to make sure */
  50. #  define MSDOS
  51. #endif
  52.  
  53. #if defined(linux) && (!defined(LINUX))
  54. #  define LINUX
  55. #endif
  56.  
  57. /* use prototypes and ANSI libraries if __STDC__, or Microsoft or Borland C, or
  58.  * Silicon Graphics, or Convex?, or IBM C Set/2, or GNU gcc/emx, or Watcom C,
  59.  * or Macintosh, or Windows NT, or Sequent, or Atari.
  60.  */
  61. #if defined(__STDC__) || defined(MSDOS) || defined(sgi)
  62. #  ifndef PROTO
  63. #    define PROTO
  64. #  endif
  65. #  define MODERN
  66. #endif
  67. #if defined(__IBMC__) || defined(__EMX__) || defined(__WATCOMC__)
  68. #  ifndef PROTO
  69. #    define PROTO
  70. #  endif
  71. #  define MODERN
  72. #endif
  73. #if defined(THINK_C) || defined(MPW) || defined(WIN32) || defined(_SEQUENT_)
  74. #  ifndef PROTO
  75. #    define PROTO
  76. #  endif
  77. #  define MODERN
  78. #endif
  79. #if defined(ATARI_ST) || defined(__BORLANDC__)  /* || defined(__convexc__) */
  80. #  ifndef PROTO
  81. #    define PROTO
  82. #  endif
  83. #  define MODERN
  84. #endif
  85.  
  86. /* turn off prototypes if requested */
  87. #if defined(NOPROTO) && defined(PROTO)
  88. #  undef PROTO
  89. #endif
  90.  
  91. /* used to remove arguments in function prototypes for non-ANSI C */
  92. #ifdef PROTO
  93. #  define OF(a) a
  94. #else /* !PROTO */
  95. #  define OF(a) ()
  96. #endif /* ?PROTO */
  97.  
  98. /* bad or (occasionally?) missing stddef.h: */
  99. #if defined(M_XENIX) || defined(DNIX)
  100. #  define NO_STDDEF_H
  101. #endif
  102.  
  103. #if (defined(__NetBSD__) && !defined(__386BSD__))
  104. #  define __386BSD__
  105. #endif
  106.  
  107. #if 0  /* GRR 931003:  BOGUS!  Screwed-up systems can define this explicitly */
  108. /* cannot depend on MODERN for presence of stdlib.h */
  109. #if defined(__GNUC__)
  110. #  if (!defined(__EMX__) && !defined(__386BSD__) && !defined(LINUX))
  111. #    define NO_STDLIB_H
  112. #  endif
  113. #endif /* __GNUC__ */
  114. #endif /* 0 */
  115.  
  116. #if defined(apollo)          /* defines __STDC__ */
  117. #    define NO_STDLIB_H
  118. #endif /* apollo */
  119.  
  120. #ifdef DNIX
  121. #  define SYSV
  122. #  define SHORT_NAMES         /* 14-char limitation on path components */
  123. /* #  define FILENAME_MAX  14 */
  124. #  define FILENAME_MAX  NAME_MAX    /* GRR:  experiment */
  125. #endif
  126.  
  127. #if (defined(__SYSTEM_FIVE) || defined(M_SYSV) || defined(M_SYS5))
  128. #  ifndef SYSV
  129. #    define SYSV
  130. #  endif /* !SYSV */
  131. #endif /* __SYSTEM_FIVE || M_SYSV || M_SYS5 */
  132.  
  133. #if (defined(SYSV) || defined(CRAY) || defined(LINUX))
  134. #  ifndef TERMIO
  135. #    define TERMIO
  136. #  endif /* !TERMIO */
  137. #endif /* SYSV || CRAY || LINUX */
  138.  
  139. #if (defined(ultrix) || defined(bsd4_2) || defined(sun) || defined(pyr))
  140. #  if (!defined(BSD) && !defined(SYSV))
  141. #    define BSD
  142. #  endif
  143. #endif /* ultrix || bsd4_2 || sun || pyr */
  144. #if defined(__convexc__) || defined(__386BSD__)
  145. #  if (!defined(BSD) && !defined(SYSV))
  146. #    define BSD
  147. #  endif
  148. #endif /* __convexc__ || __386BSD__ */
  149.  
  150. #ifdef pyr  /* Pyramid */
  151. #  ifdef BSD
  152. #    define pyr_bsd
  153. #  endif
  154. #  define ZMEM            /* should ZMEM only be for BSD universe...? */
  155. #  define DECLARE_ERRNO   /*  (AT&T memcpy was claimed to be very slow) */
  156. #endif /* pyr */
  157.  
  158. #if (defined(CRAY) && defined(ZMEM))
  159. #  undef ZMEM
  160. #endif
  161.  
  162. /* stat() bug for Borland, Watcom, VAX C (also GNU?), and Atari ST MiNT on
  163.  * TOS filesystems:  returns 0 for wildcards!  (returns 0xffffffff on Minix
  164.  * filesystem or U: drive under Atari MiNT) */
  165. #if (defined(__TURBOC__) || defined(__WATCOMC__) || defined(VMS))
  166. #  define WILD_STAT_BUG
  167. #endif
  168. #if (defined(__MINT__))
  169. #  define WILD_STAT_BUG
  170. #endif
  171.  
  172. #ifdef WILD_STAT_BUG
  173. #  define SSTAT(path,pbuf) (iswild(path) || stat(path,pbuf))
  174. #else
  175. #  define SSTAT stat
  176. #endif
  177.  
  178. #define STRNICMP zstrnicmp
  179.  
  180. #if 0  /* internal version renamed to zstrnicmp and used for all systems now */
  181. /* SCO Unix, dnix, Interactive SysV (all SysV?):  no strnicmp or strncasecmp.
  182.  * Also Sun 386i, VMS (just VAX C?), djgpp 1.10 and earlier, Coherent. */
  183. #if (defined(SYSV) || defined(sun386) || defined(VMS) || defined(__GO32__))
  184. #  define NO_STRNICMP
  185. #endif
  186. #if (defined(COHERENT))
  187. #  define NO_STRNICMP
  188. #endif
  189. #ifndef NO_STRNICMP
  190. #  if (!defined(MODERN) || defined(NeXT) || defined(CRAY) || defined(LINUX))
  191. #    define strnicmp strncasecmp
  192. #  endif
  193. #  if (defined(__386BSD__) || defined(__bsdi__))
  194. #    define strnicmp strncasecmp
  195. #  endif
  196. #endif
  197. #endif /* 0 */
  198.  
  199.  
  200.  
  201.  
  202.  
  203. /***************************/
  204. /*  OS-Dependent Includes  */
  205. /***************************/
  206.  
  207. #ifndef MINIX            /* Minix needs it after all the other includes (?) */
  208. #  include <stdio.h>
  209. #endif
  210. #include <ctype.h>       /* skip for VMS, to use tolower() function? */
  211. #include <errno.h>       /* used in mapname() */
  212. #include <string.h>      /* GRR:  EXPERIMENTAL! */
  213. #ifdef MODERN
  214. #  include <limits.h>    /* GRR:  EXPERIMENTAL!  (can be deleted) */
  215. #endif
  216.  
  217. #if 0    /* GRR:  MORE EXPERIMENTING (moved to OS sections) */
  218. #ifdef VMS
  219. #  include <types.h>     /* (placed up here instead of in VMS section below */
  220. #  include <stat.h>      /* because types.h is used in some other headers) */
  221. #else /* !VMS */
  222. #    if (!defined(THINK_C) && !defined(MPW) && !defined(ATARI_ST) && !defined(AZTEC_C))
  223. #      include <sys/types.h>         /* off_t, time_t, dev_t, ... */
  224. #      include <sys/stat.h>
  225. #    endif /* !THINK_C && !MPW && !ATARI_ST && !AZTEC_C */
  226. #endif /* ?VMS */
  227. #endif
  228.  
  229. #ifdef EFT
  230. #  define LONGINT off_t  /* Amdahl UTS nonsense ("extended file types") */
  231. #else
  232. #  define LONGINT long
  233. #endif
  234.  
  235. #ifdef MODERN
  236. #  ifndef NO_STDDEF_H
  237. #    include <stddef.h>
  238. #  endif
  239. #  ifndef NO_STDLIB_H
  240. #    include <stdlib.h>    /* standard library prototypes, malloc(), etc. */
  241. #  endif
  242.    typedef size_t extent;
  243.    typedef void voidp;
  244. /* #  include <string.h> */      /* defines strcpy, strcmp, memcpy, etc. */
  245. #else /* !MODERN */
  246. /*    char *strchr(), *strrchr();  */
  247.    LONGINT lseek();
  248.    char *malloc();
  249.    typedef unsigned int extent;
  250.    typedef char voidp;
  251. #  define void int
  252. #endif /* ?MODERN */
  253.  
  254. /* this include must be down here for SysV.4, for some reason... */
  255. #include <signal.h>      /* used in unzip.c, file_io.c */
  256.  
  257. /*---------------------------------------------------------------------------
  258.     Amiga section:
  259.   ---------------------------------------------------------------------------*/
  260.  
  261. #ifdef AMIGA
  262. #  include "amiga/amiga.h"
  263. #  ifndef AZTEC_C
  264. #    include <sys/types.h>      /* off_t, time_t, dev_t, ... */
  265. #    include <sys/stat.h>
  266. #  endif
  267. #  include <fcntl.h>            /* O_BINARY for open() w/o CR/LF translation */
  268. #  define DATE_FORMAT   DF_MDY
  269. #  define lenEOL        1
  270. #  define PutNativeEOL  *q++ = native(LF);
  271. /* #  define USE_FWRITE   if write() returns 16-bit int */
  272. #endif
  273.  
  274. /*---------------------------------------------------------------------------
  275.     Atari ST section:
  276.   -----------------------------------------------------------